# 第三个作业
# stu_module是用到的包

# 学员信息数据管理系统

# 导入相应的模块
import pymysql


class Stu:
    '''定义学生信息表类'''

    def __init__(self, table_name='stu'):
        '''构造方法实现数据库连接'''

        self.name = table_name
        self.db = pymysql.connect(host='localhost', user='root', password='', db='stubase', charset='utf8')
        self.cursor = self.db.cursor()

    def findAll(self):
        '''查询记录'''

        sql = "SELECT sid,name,age,classid FROM " + self.name
        try:
            m = self.cursor.execute(sql)  # self.cursor.rowcount
            # print('查询到%s条记录'%m)
            return self.cursor.fetchall()
        except Exception as err:
            print('SQL执行错误，原因：', err)

    def delete(self, id):
        '''删除记录'''

        sql = "DELETE FROM " + self.name + " WHERE sid=%d" % id
        try:
            m = self.cursor.execute(sql)
            self.db.commit()
            print('成功删除%s条记录' % m)
        except Exception as err:
            self.db.rollback()
            print('SQL执行错误，原因：', err)

    def insert(self, data):
        '''插入记录'''

        sql = "INSERT INTO " + self.name + "(name,age,classid) VALUES('%s','%d','%s')" % data
        try:
            m = self.cursor.execute(sql)
            self.db.commit()
            print('成功添加%s条记录' % m)
        except Exception as err:
            self.db.rollback()
            print('SQL执行错误，原因：', err)

    def __del__(self):
        '''析构方法关闭数据库连接'''
        self.db.close()


# 创建学生信息表对象
stu = Stu()


def ShowStu(stu):
    '''
    学生信息的输出函数
    '''
    stulist = stu.findAll()
    if len(stulist) == 0:
        print('')
        print('==========没有学员信息可以输出！=========')
        print('')
    else:
        print("|{0:<5}| {1:<10}| {2:<5}| {3:<10}|".format("sid", "name", "age", "classid"))
        print("-" * 40)
        for record in stulist:
            print("|{0:<5}| {1:<10}| {2:<5}| {3:<10}|".format(record[0], record[1], record[2], record[3]))


while True:
    # 输出初始界面
    print('')
    print("=" * 12, "学员管理系统", "=" * 14)
    print("{0:1} {1:13} {2:15}".format(" ", "1. 查看学员信息", "2. 添加学员信息"))
    print("{0:1} {1:13} {2:15}".format(" ", "3. 删除学员信息", "4. 退出系统"))
    print("=" * 40)
    print('')
    try:
        key = input("请输入对应的选择：")

        # 根据键盘值，判断并执行对应的操作
        if key == '1':
            print('')
            print("=" * 12, "学员信息浏览", "=" * 14)
            ShowStu(stu)
            print('')
            input("按回车键继续：")
        elif key == '2':
            print('')
            print("=" * 12, "学员信息添加", "=" * 14)
            print('')
            name = input("请输入要添加的姓名：")
            age = int(input("请输入要添加的年龄："))
            classid = input("请输入要添加的班级名称：")
            data = (name, age, classid)
            print('')
            stu.insert(data)
            input('请按回车键更新显示！')
            print('')
            ShowStu(stu)
            print('')
            input("按回车键继续：")
        elif key == '3':
            print('')
            print("=" * 12, "学员信息删除", "=" * 14)
            ShowStu(stu)
            print('')
            sid = int(input("请输入你要删除的学员id号："))
            print('')
            stu.delete(sid)
            input('请按回车键更新显示！')
            print('')
            ShowStu(stu)
            print('')
            input("按回车键继续：")
        elif key == '4':
            print('')
            print("=" * 12, "再见", "=" * 14)
            print('')
            break
        else:
            print('')
            print("======== 无效的键盘输入！ ==========")
            print('')

    except Exception as err:
        print('操作有误：', err)
